// 腾讯地图工具类
const QQMapWX = requirePlugin('qqmap')

let qqMapKey = '' // 腾讯地图Key，需要在app.js中初始化

// 初始化腾讯地图
function initQQMap(key) {
  qqMapKey = key
  if (!key) {
    console.warn('腾讯地图Key未设置，请先配置Key')
    return
  }
  QQMapWX.init({
    key: key
  })
}

// 逆地址解析（根据经纬度获取地址信息）
function reverseGeocoder(latitude, longitude) {
  return new Promise((resolve, reject) => {
    if (!qqMapKey) {
      reject(new Error('腾讯地图未初始化，请先设置Key'))
      return
    }
    QQMapWX.reverseGeocoder({
      location: {
        latitude: latitude,
        longitude: longitude
      },
      success: (res) => {
        resolve(res)
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

// 地址解析（根据地址获取经纬度）
function geocoder(address) {
  return new Promise((resolve, reject) => {
    if (!qqMapKey) {
      reject(new Error('腾讯地图未初始化，请先设置Key'))
      return
    }
    QQMapWX.geocoder({
      address: address,
      success: (res) => {
        resolve(res)
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

// 搜索附近地点
function searchNearby(keyword, location, radius = 1000) {
  return new Promise((resolve, reject) => {
    if (!qqMapKey) {
      reject(new Error('腾讯地图未初始化，请先设置Key'))
      return
    }
    QQMapWX.search({
      keyword: keyword,
      location: {
        latitude: location.latitude,
        longitude: location.longitude
      },
      radius: radius,
      success: (res) => {
        resolve(res)
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

// 计算两点间距离（公里）
function calculateDistance(lat1, lng1, lat2, lng2) {
  const R = 6371 // 地球半径（公里）
  const dLat = (lat2 - lat1) * Math.PI / 180
  const dLng = (lng2 - lng1) * Math.PI / 180
  const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
    Math.sin(dLng / 2) * Math.sin(dLng / 2)
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
  return R * c
}

// 获取地址的省市区信息
function getAddressInfo(latitude, longitude) {
  return new Promise(async (resolve, reject) => {
    try {
      const res = await reverseGeocoder(latitude, longitude)
      if (res.result && res.result.ad_info) {
        const adInfo = res.result.ad_info
        resolve({
          province: adInfo.province || '',
          city: adInfo.city || '',
          district: adInfo.district || '',
          address: res.result.address || ''
        })
      } else {
        reject(new Error('地址信息解析失败'))
      }
    } catch (err) {
      reject(err)
    }
  })
}

module.exports = {
  initQQMap,
  reverseGeocoder,
  geocoder,
  searchNearby,
  calculateDistance,
  getAddressInfo
}




